This fixes the state machine of the vTPM driver.
authorkaf24@firebug.cl.cam.ac.uk <kaf24@firebug.cl.cam.ac.uk>
Thu, 13 Apr 2006 09:59:08 +0000 (10:59 +0100)
committerkaf24@firebug.cl.cam.ac.uk <kaf24@firebug.cl.cam.ac.uk>
Thu, 13 Apr 2006 09:59:08 +0000 (10:59 +0100)
Signed-off-by: Stefan Berger <stefanb@us.ibm.com>
linux-2.6-xen-sparse/drivers/xen/tpmback/xenbus.c
linux-2.6-xen-sparse/drivers/xen/tpmfront/tpmfront.c

index 6e118e7b242f7106f4a0804093bee059c5edbe1a..422abd0551498b751da6e40e94ff7ca7ba805d09 100644 (file)
@@ -164,10 +164,10 @@ static void frontend_changed(struct xenbus_device *dev,
 
        switch (frontend_state) {
        case XenbusStateInitialising:
-       case XenbusStateConnected:
+       case XenbusStateInitialised:
                break;
 
-       case XenbusStateInitialised:
+       case XenbusStateConnected:
                err = connect_ring(be);
                if (err) {
                        return;
index 53ccf66b828534fbf6f9d61eb80137dc4815583b..d8d026b7a24edd3e81829c7abaf666b86ebed6ca 100644 (file)
@@ -334,12 +334,6 @@ again:
                goto abort_transaction;
        }
 
-       err = xenbus_printf(xbt, dev->nodename,
-                           "state", "%d", XenbusStateInitialised);
-       if (err) {
-               goto abort_transaction;
-       }
-
        err = xenbus_transaction_end(xbt, 0);
        if (err == -EAGAIN)
                goto again;
@@ -347,6 +341,9 @@ again:
                xenbus_dev_fatal(dev, err, "completing transaction");
                goto destroy_tpmring;
        }
+
+       xenbus_switch_state(dev, XenbusStateConnected);
+
        return 0;
 
 abort_transaction:
@@ -387,6 +384,7 @@ static void backend_changed(struct xenbus_device *dev,
                if (tp->is_suspended == 0) {
                        device_unregister(&dev->dev);
                }
+               xenbus_switch_state(dev, XenbusStateClosed);
                break;
        }
 }
@@ -439,6 +437,7 @@ static int tpmfront_suspend(struct xenbus_device *dev)
 
        /* lock, so no app can send */
        mutex_lock(&suspend_lock);
+       xenbus_switch_state(dev, XenbusStateClosed);
        tp->is_suspended = 1;
 
        for (ctr = 0; atomic_read(&tp->tx_busy) && ctr <= 25; ctr++) {